package com.sinvo.oa.util;

import com.sinvo.oa.entity.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description 菜单工具类
 */
public class MenuUtils {
    public static List<SysMenu> treeify(List<SysMenu> menuList) {
        //存放最终结果
        List<SysMenu> trees = new ArrayList<>();
        for (SysMenu sysMenu : menuList) {
            //parentId为0为根节点aka递归入口
            if (sysMenu.getParentId() == 0){
                trees.add(getChildren(sysMenu,menuList));
            }
        }
        return trees;
    }

    /**
     * 递归查找root的子节点
     * @param root 根节点
     * @param menuList 所有菜单 遍历以查找子节点
     * @return List<SysMenu>
     */
    static SysMenu getChildren(SysMenu root,List<SysMenu> menuList){
        //设置为空(初始化)
        root.setChildren(new ArrayList<>());
        for (SysMenu node : menuList) {
            //遍历所有菜单 找到parentId = 根节点id
            if (root.getId().equals(node.getParentId())){
                //加入list中
                root.getChildren().add(getChildren(node,menuList));
            }
        }
        return root;
    }
}
